home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 85 / CD Temático 40 Febrero 2004.iso / DOS / testdisk / src / ext2fs / dosio.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-03  |  4.5 KB  |  154 lines

  1. /*
  2.  * v1.0
  3.  *
  4.  * Disk I/O include file for the ext2fs/DOS library.
  5.  *
  6.  * Copyright (c) 1997 Mark Habersack
  7.  * This file may be distributed under the terms of the GNU Public License.
  8.  *
  9.  */
  10. #ifndef __diskio_h
  11. #define __diskio_h
  12. #ifdef __TURBOC__
  13. #ifndef __LARGE__
  14. # error "ext2fs/DOS library requires LARGE model!"
  15. #endif
  16. #endif
  17.  
  18. #ifdef __TURBOC__
  19. #include "msdos.h"
  20. #endif
  21.  
  22. /*
  23.  * A helper structure used in LBA => CHS conversion
  24.  */
  25. typedef struct
  26. {
  27.   unsigned short       cyl;     /* Cylinder (or track) */
  28.   unsigned short       head;
  29.   unsigned short       sector;
  30.   unsigned short       offset;  /* Offset of byte within the sector */
  31. } CHS;
  32.  
  33. /*
  34.  * All partition data we need is here
  35.  */
  36. typedef struct
  37. {
  38.   char                 *dev;  /* _Linux_ device name (like "/dev/hda1") */
  39.   unsigned char        phys;  /* Physical DOS drive number */
  40.   unsigned long        start; /* LBA address of partition start */
  41.   unsigned long        len;   /* length of partition in sectors */
  42.   unsigned char        pno;   /* Partition number (read from *dev) */
  43.  
  44.   /* This partition's drive geometry */
  45.   unsigned short       cyls;
  46.   unsigned short       heads;
  47.   unsigned short       sects;
  48. } PARTITION;
  49.  
  50. /*
  51.  * PC partition table entry format
  52.  */
  53. #ifdef __DJGPP__
  54. #pragma pack(1)
  55. #endif
  56. typedef struct
  57. {
  58.   unsigned char        active;
  59.   unsigned char        start_head;
  60.   unsigned char        start_sec;
  61.   unsigned char        start_cyl;
  62.   unsigned char        type;
  63.   unsigned char        end_head;
  64.   unsigned char        end_sec;
  65.   unsigned char        end_cyl;
  66.   unsigned long        first_sec_rel;
  67.   unsigned long        size;
  68. } PTABLE_ENTRY;
  69. #ifdef __DJGPP__
  70. #pragma pack()
  71. #endif
  72.  
  73. /*
  74.  * INT 0x13 operation codes
  75.  */
  76. #define DISK_READ          0x02
  77. #define DISK_WRITE         0x03
  78. #define DISK_GET_GEOMETRY  0x08
  79. #define DISK_READY         0x10
  80.  
  81. /*
  82.  * Errors to put in _dio_error
  83.  */
  84. #define ERR_BADDEV         0x00000001L
  85. #define ERR_HARDWARE       0x00000002L
  86. #define ERR_NOTSUPP        0x00000003L
  87. #define ERR_NOTEXT2FS      0x00000004L
  88. #define ERR_EMPTYPART      0x00000005L
  89. #define ERR_LINUXSWAP      0x00000006L
  90.  
  91. /*
  92.  * Functions in diskio.c
  93.  */
  94.  
  95. /*
  96.  * Variable contains last module's error
  97.  */
  98. extern unsigned long        _dio_error;
  99.  
  100. /*
  101.  * This one contains last hardware error (if _dio_error == ERR_HARDWARE)
  102.  */
  103. extern unsigned long        _dio_hw_error;
  104.  
  105. /*
  106.  * Macros to check for disk hardware errors
  107.  */
  108. #define HW_OK()             ((unsigned char)_dio_hw_error == 0x00)
  109. #define HW_BAD_CMD()        ((unsigned char)_dio_hw_error == 0x01)
  110. #define HW_NO_ADDR_MARK()   ((unsigned char)_dio_hw_error == 0x02)
  111. #define HW_WRITE_PROT()     ((unsigned char)_dio_hw_error == 0x03)
  112. #define HW_NO_SECTOR()      ((unsigned char)_dio_hw_error == 0x04)
  113. #define HW_RESET_FAIL()     ((unsigned char)_dio_hw_error == 0x05)
  114. #define HW_DISK_CHANGED()   ((unsigned char)_dio_hw_error == 0x06)
  115. #define HW_DRIVE_FAIL()     ((unsigned char)_dio_hw_error == 0x07)
  116. #define HW_DMA_OVERRUN()    ((unsigned char)_dio_hw_error == 0x08)
  117. #define HW_DMA_BOUNDARY()   ((unsigned char)_dio_hw_error == 0x09)
  118. #define HW_BAD_SECTOR()     ((unsigned char)_dio_hw_error == 0x0A)
  119. #define HW_BAD_TRACK()      ((unsigned char)_dio_hw_error == 0x0B)
  120. #define HW_UNSUPP_TRACK()   ((unsigned char)_dio_hw_error == 0x0C)
  121. #define HW_BAD_CRC_ECC()    ((unsigned char)_dio_hw_error == 0x10)
  122. #define HW_CRC_ECC_CORR()   ((unsigned char)_dio_hw_error == 0x11)
  123. #define HW_CONTR_FAIL()     ((unsigned char)_dio_hw_error == 0x20)
  124. #define HW_SEEK_FAIL()      ((unsigned char)_dio_hw_error == 0x40)
  125. #define HW_ATTACH_FAIL()    ((unsigned char)_dio_hw_error == 0x80)
  126. #define HW_DRIVE_NREADY()   ((unsigned char)_dio_hw_error == 0xAA)
  127. #define HW_UNDEF_ERROR()    ((unsigned char)_dio_hw_error == 0xBB)
  128. #define HW_WRITE_FAULT()    ((unsigned char)_dio_hw_error == 0xCC)
  129. #define HW_STATUS_ERROR()   ((unsigned char)_dio_hw_error == 0xE0)
  130. #define HW_SENSE_FAIL()     ((unsigned char)_dio_hw_error == 0xFF)
  131.  
  132.  
  133. /*
  134.  * Open the specified partition.
  135.  * String 'dev' must have a format:
  136.  *
  137.  *  /dev/{sd|hd|fd}[X]
  138.  *
  139.  * where,
  140.  *
  141.  *  only one of the option in curly braces can be used and X is an optional
  142.  *  partition number for the given device. If X is not specified, function
  143.  *  scans the drive's partition table in search for the first Linux ext2fs
  144.  *  partition (signature 0x83). Along the way it dives into every extended
  145.  *  partition encountered.
  146.  *  Scan ends if either (a) there are no more used partition entries, or
  147.  *  (b) there is no Xth partition.
  148.  *
  149.  * Routine returns 0 on success and !=0 otherwise.
  150.  */
  151. int open_partition(char *dev);
  152.  
  153. #endif /* __diskio_h */
  154.